// 菜单接口
import { MenuListType } from '@/types/menu'
import { ElLoading } from 'element-plus'
import { useUserStore } from '@/store/modules/user'
import request from '@/utils/http'

export const menuService = {
  // 获取菜单列表，从后端获取真实数据
  async getMenuList(): Promise<{ menuList: MenuListType[]; closeLoading: () => void }> {
    const loading = ElLoading.service({
      lock: true,
      background: 'rgba(0, 0, 0, 0)',
      // svg: fourDotsSpinnerSvg,
      svgViewBox: '0 0 40 40'
    })

    try {
      // 从后端获取菜单数据
      console.log('开始获取菜单数据...')
      const userStore = useUserStore()
      const platformUserId = userStore.info && userStore.info.id ? String(userStore.info.id) : ''
      console.log('当前platformUserId:', platformUserId)

      const response = await request.post({
        url: '/admin/build',
        params: {
          platformUserId: platformUserId
        }
      })

      // 添加日志以便调试
      console.log('获取菜单数据:', response)
      console.log('platformUserId:', platformUserId)

      // 确保返回的是数组格式
      // 修复：正确处理后端返回的数据结构
      const menuList = (response as any).data || (Array.isArray(response) ? response : [])
      console.log('处理后的菜单数据:', JSON.stringify(menuList, null, 2))

      // 只保留"用户端管理"和"系统管理"相关的菜单
      const initialFilteredMenuList = Array.isArray(menuList)
        ? menuList.filter((item) => {
            // 保留permissionName为"用户端管理"或"系统管理"的菜单项
            const isUserAppMenu = item.permissionName === '用户端管理'
            const isSystemMenu = item.permissionName === '系统管理'
            const isBusinessMenu = item.permissionName === '商家端管理'
            const isOrderMenu = item.permissionName === '订单管理'
            const shouldKeep = isUserAppMenu || isSystemMenu||isBusinessMenu||isOrderMenu

            if (!shouldKeep) {
              console.log('过滤掉非目标菜单项:', JSON.stringify(item, null, 2))
            }

            return shouldKeep
          })
        : []

      console.log('过滤前的菜单数据:', JSON.stringify(menuList, null, 2))
      console.log('过滤后的菜单数据:', JSON.stringify(initialFilteredMenuList, null, 2))

      // 确保每个菜单项都有meta对象，并且不添加默认的英文标题
      // 保留后端返回的图标，用于在页面上回显角标
      const processedMenuList = Array.isArray(initialFilteredMenuList)
        ? initialFilteredMenuList.map(normalizeMenu)
        : []
      console.log('处理后的菜单数据(标准化后):', JSON.stringify(processedMenuList, null, 2))

      // 递归标准化菜单项
      function normalizeMenu(item: any): any {
        // 确保每个菜单项都有meta对象
        if (!item.meta) {
          item.meta = {
            title: item.name || item.path || '',
            title_en: '' // 不添加默认英文标题
          }
        } else {
          // 如果没有title_en字段，设置为空字符串而不是默认值
          if (item.meta.title_en === undefined) {
            item.meta.title_en = ''
          }
          // 保留后端返回的图标，用于在页面上回显角标
        // 如果根级有icon字段，也保存到meta中以便统一处理
        if (item.icon && !item.meta.icon) {
          item.meta.icon = item.icon
        }
        }

        // 标准化路径格式，确保父路由不以/开头，子路由以/开头
        if (item.children && Array.isArray(item.children) && item.children.length > 0) {
          // 父路由不以/开头
          if (item.path && item.path.startsWith('/')) {
            item.path = item.path.substring(1)
          }
        } else {
          // 子路由以/开头
          if (item.path && !item.path.startsWith('/')) {
            item.path = '/' + item.path
          }
        }

        // 递归处理子菜单项
        if (item.children && Array.isArray(item.children)) {
          item.children = item.children.map(normalizeMenu)
        }
        return item
      }

      // 过滤隐藏的菜单项
      function filterHiddenMenus(menuList: any[]): any[] {
        return menuList.filter((item) => {
          // 如果菜单项有isHide字段且为true，则过滤掉
          if (item.meta?.isHide === true) {
            return false
          }

          // 递归过滤子菜单
          if (item.children && Array.isArray(item.children)) {
            item.children = filterHiddenMenus(item.children)
            // 如果过滤后子菜单为空，且当前菜单没有其他内容，也过滤掉
            if (item.children.length === 0 && !item.component && !item.path) {
              return false
            }
          }

          return true
        })
      }

      // 应用菜单过滤
      const filteredMenuList = filterHiddenMenus(processedMenuList)

      return {
        menuList: filteredMenuList,
        closeLoading: () => loading.close()
      }
    } catch (error) {
      // 出错时关闭loading
      loading.close()
      console.error('获取菜单列表失败:', error)
      throw error
    }
  }
}
